package values

import (
	"regexp"
	"strings"

	"gitee.com/gousing/values/chinese_id"
)

// 验证电子邮箱，先通过ASCII快速检查再通过正则，比纯正则性能提高30-50%
func IsEmail(v string) bool {
	if len(v) < 5 {
		// 最短的邮箱号 1@1.c
		return false
	}
	if !strings.Contains(v, "@") || v[0:1] == "@" {
		// 不含有@符号
		return false
	}

	if !IsLetterWith(v, 1, 1, 0, "@-._") {
		// 含有非法字符
		return false
	}

	pattern := `^[0-9a-z][0-9a-z\-\._]{0,31}@([0-9a-z][0-9a-z-]{0,30}[0-9a-z]\.){1,4}[a-z]{2,4}$`
	reg := regexp.MustCompile(pattern)
	return reg.MatchString(v)
}

/*
号段划分
移动号段：134 135 136 137 138 139 147 148 150 151 152 157 158 159 172 178 182 183 184 187 188 195 198
联通号段：130 131 132 145 146 155 156 166 167 171 175 176 185 186 196
电信号段：133 149 153 173 174 177 180 181 189 190 191 193 199
虚拟运营商:162 165 167 170 171
广电：192
*/
// IsChineseMobile 无正则验证手机号是否正确，ASCII快速检查
func IsChineseMobile(v string) bool {
	if len(v) != 11 {
		return false
	}
	if !IsUint(v) || v[0:1] != "1" {
		return false
	}
	s2 := v[1:2]
	if s2 != "3" && s2 != "4" && s2 != "5" && s2 != "6" && s2 != "7" && s2 != "8" && s2 != "9" {
		return false
	}
	return true
}

func IsChineseID(no string) bool {
	return chinese_id.IsValid(no)
}
func ChineseIDCheck(no string) error {
	return chinese_id.CheckError(no)
}
func ChineseIDParse(no string) (birthday string, isMale bool, addrMask int, err error) {
	return chinese_id.ParseInfo(no)
}
